package com.dayuanit.dy15.lesson29.demo3;

public class ConsumerRunnable implements Runnable {

    private MarCarOrder marCarOrder;

    public ConsumerRunnable(MarCarOrder marCarOrder) {
        this.marCarOrder = marCarOrder;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (MarCarOrder.obj) {
                consume();
            }

            try {
                Thread.sleep(3 * 1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private void consume() {
        //不能用if,使用while循环是为了，当其他线程notify你的时候，你要做个自检，确认一下条件是不是真正的符合。
        while (marCarOrder.getOrder() == null) {
            //指令还没有生产好，消费者应该要wait等待
            try {
                System.out.println(Thread.currentThread().getName() + " 等待...");
                MarCarOrder.obj.wait();//消费者线程就成为阻塞状态，不参与CPU的竞争。
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        //开始消费者的业务
        String consume = marCarOrder.consume();
        System.out.println(Thread.currentThread().getName() + " -> " + consume);

        //业务做完后 要notify一下，通知等待的在MarsCardOrder.obj上的线程。
        MarCarOrder.obj.notifyAll();
    }
}
